home *** CD-ROM | disk | FTP | other *** search
/ Final Fantasy the Spirits Within Cardz / Final Fantasy the Spirits Within CD Cardz - Disc 3: Dr. Sid.iso / pc / assets / sid-puzzle.dcr / 00065_Frame Behavior.ls < prev    next >
Encoding:
Text File  |  2001-07-22  |  3.2 KB  |  123 lines

  1. property pFirstSprite, pLastSprite, pOpenSpot, pGameOverFrame, pSlideSound, pPieceWidth, pPieceHeight, pUpperLeftLoc, pMode
  2. global checkForMovieOver
  3.  
  4. on getPropertyDescriptionList me
  5.   list = [:]
  6.   addProp(list, #pFirstSprite, [#comment: "First Sprite", #format: #integer, #default: 31])
  7.   addProp(list, #pLastSprite, [#comment: "Last Sprite", #format: #integer, #default: 45])
  8.   addProp(list, #pOpenSpot, [#comment: "Open Spot (point(x,y))", #format: #point, #default: point(4, 4)])
  9.   addProp(list, #pSlideSound, [#comment: "Slide Sound", #format: #string, #default: EMPTY])
  10.   addProp(list, #pGameOverFrame, [#comment: "Game Over Frame", #format: #marker, #default: #next])
  11.   return list
  12. end
  13.  
  14. on beginSprite me
  15.   pUpperLeftLoc = sprite(pFirstSprite).loc
  16.   pMode = #normal
  17.   randomizePieces(me)
  18. end
  19.  
  20. on randomizePieces me
  21.   posList = []
  22.   s = pFirstSprite
  23.   repeat while s <= pLastSprite
  24.     add(posList, sprite(s).loc)
  25.     s = 1 + s
  26.   end repeat
  27.   s = pFirstSprite
  28.   repeat while s <= pLastSprite
  29.     r = random(posList.count)
  30.     sprite(s).loc = posList[r]
  31.     deleteAt(posList, r)
  32.     s = 1 + s
  33.   end repeat
  34. end
  35.  
  36. on clickPuzzle me, spriteNumber
  37.   if pMode <> #normal then
  38.     exit
  39.   end if
  40.   pPieceWidth = sprite(pFirstSprite).width
  41.   pPieceHeight = sprite(pFirstSprite).height
  42.   x = ((sprite(spriteNumber).locH - pUpperLeftLoc.locH) / pPieceWidth) + 1
  43.   y = ((sprite(spriteNumber).locV - pUpperLeftLoc.locV) / pPieceHeight) + 1
  44.   if pOpenSpot.locV = y then
  45.     if pOpenSpot.locH = (x - 1) then
  46.       move(me, spriteNumber, -1, 0)
  47.     else
  48.       if pOpenSpot.locH = (x + 1) then
  49.         move(me, spriteNumber, 1, 0)
  50.       end if
  51.     end if
  52.   else
  53.     if pOpenSpot.locH = x then
  54.       if pOpenSpot.locV = (y - 1) then
  55.         move(me, spriteNumber, 0, -1)
  56.       else
  57.         if pOpenSpot.locV = (y + 1) then
  58.           move(me, spriteNumber, 0, 1)
  59.         end if
  60.       end if
  61.     end if
  62.   end if
  63. end
  64.  
  65. on move me, spriteNumber, dx, dy
  66.   newloc = sprite(spriteNumber).loc + point(dx * pPieceWidth, dy * pPieceHeight)
  67.   pOpenSpot = pOpenSpot - point(dx, dy)
  68.   sendSprite(spriteNumber, #changeLoc, newloc)
  69.   if pSlideSound <> EMPTY then
  70.     puppetSound(pSlideSound)
  71.   end if
  72.   pMode = #animate
  73. end
  74.  
  75. on resetMode me
  76.   pMode = #normal
  77.   if checkForGameOver(me) then
  78.     startTimer()
  79.     repeat while the timer < 200
  80.       updateStage()
  81.     end repeat
  82.     go(pGameOverFrame)
  83.   end if
  84. end
  85.  
  86. on checkForGameOver me
  87.   prevLoc = sprite(pFirstSprite).loc
  88.   i = pFirstSprite + 1
  89.   repeat while i <= pLastSprite
  90.     nextLoc = sprite(i).loc
  91.     if nextLoc.locH <> (prevLoc.locH + pPieceWidth) then
  92.       if (nextLoc.locV <> (prevLoc.locV + pPieceHeight)) or (nextLoc.locH <> pUpperLeftLoc.locH) then
  93.         return 0
  94.       end if
  95.     end if
  96.     prevLoc = nextLoc
  97.     i = 1 + i
  98.   end repeat
  99.   return 1
  100. end
  101.  
  102. on exitFrame
  103.   if not sprite(2).playing then
  104.     if checkForMovieOver = 0 then
  105.       sprite(2).visible = 0
  106.       sprite(19).visible = 1
  107.       i = 23
  108.       repeat while i <= 25
  109.         sprite(i).visible = 1
  110.         i = 1 + i
  111.       end repeat
  112.       sprite(29).visible = 1
  113.       j = 47
  114.       repeat while j <= 49
  115.         sprite(j).visible = 1
  116.         j = 1 + j
  117.       end repeat
  118.       checkForMovieOver = 1
  119.     end if
  120.   end if
  121.   go(the frame)
  122. end
  123.